package com.leetcode;

public class Leetcode123 {

    /**
     *  在一天结束之后，会出现五种状态之一：
        1,未进行过任何操作；//收益是0，因此我们可以不用记录
        2,只进行过一次买操作；
        3,进行了一次买操作和一次卖操作，即完成了一笔交易；
        4,在完成了一笔交易的前提下，进行了第二次买操作；
        5,完成了全部两笔交易。
     *  无论题目中是否允许「在同一天买入并且卖出」这一操作，最终的答案都不会受到影响，这是因为这一操作带来的收益为零。
     *
     */
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int buy1 = -prices[0];
        int buy2 = -prices[0];
        int sell1 = 0;
        int sell2 = 0;
        for (int i = 1; i < n; i++) {
            //如果buy值不变，代表未进行任何操作，这就是五种状态中的第一种
            buy1 = Math.max(buy1,-prices[i]);
            sell1 = Math.max(sell1,buy1+prices[i]);
            //有可能出现当天买入又卖出，但是收益是零，因此最终答案不受影响
            buy2 = Math.max(buy2,sell1 -prices[i]);
            sell2 = Math.max(sell2,buy2+prices[i]);
        }
        return sell2;
    }

    public static void main(String[] args) {
        Leetcode123 leetcode = new Leetcode123();
//        int[] prices = {3, 3, 5, 0, 0, 3, 1, 4};
        int[] prices = {1,2,3,4,5};
        System.out.println(leetcode.maxProfit(prices));
    }
}

